package com.kk.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;




//对所有方法进行计时

@Component
@Aspect
public class MyAop {


    @Around("execution(* com.kk.service.impl.EmpServiceImpl.findPageEmp(..))")
    public Object getAop(ProceedingJoinPoint pjp) {

        //在方法执行前获取一个系统时间，方法执行后在后去一个系统时间,两个时间差就是代码执行的时间
        Object result = null;
        long l1 = System.currentTimeMillis();
        try {
            result = pjp.proceed();
        } catch (Throwable e) {
            throw new RuntimeException(e);
        }
        long l2 = System.currentTimeMillis();
        //面向pjp获取当前正在做执行的方法
        String declaringTypeName = pjp.getSignature().getDeclaringTypeName();//类名
        String name = pjp.getSignature().getName();//方法名
        Object[] args = pjp.getArgs();
        for (Object arg : args) {
            System.out.println("参数:"+arg);
        }
        System.out.println("执行" + declaringTypeName + "类中的" + name + "方法的执行时间是" + (l2 - l1) + "ms"+"返回值为"+result);
        return result;
    }
}
